package gold.gold01;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 判定是否为字符重排
 */
public class S0102是否为字符重排 {
    // 20, 19, 比较差, 逻辑上都差不多, 但是有的使用类似bitmap, 使用固定长度的数组记录,
    // 不知道字符到底是怎么定义的, 出现符号和中文等算什么

    // 查看这两个字符串是否每个字符的数量都相同, 可以使用HashMap实现对数量的记录
    // 使用bitmap似乎同样不合适, 因为要记录数量, 数量可能很多, bitmap适合记录状态很少的情况。
    public boolean CheckPermutation(String s1, String s2) {
        Map<Character, Integer> map = new HashMap<>();
        int currentValue;
        for(Character character: s1.toCharArray()){
            // 这个赋值语句写在括号里, 再判断, 挺好的
            if((currentValue = map.getOrDefault(character, -1)) != -1){
                map.put(character, currentValue + 1);
            }else{
                map.put(character, 1);
            }
        }
        for(Character character: s2.toCharArray()){
            if((currentValue = map.getOrDefault(character, -1)) != -1){
                if(currentValue - 1 != 0){
                    map.put(character, currentValue - 1);
                }else{
                    map.remove(character);
                }

            }else{
                return false;
            }
        }
        return map.keySet().size() == 0;
    }

    /**
     * 100， 43
     */
    public boolean CheckPermutation2(String s1, String s2) {
        char[] s1chars = s1.toCharArray();
        char[] s2chars = s2.toCharArray();
        Arrays.sort(s1chars);
        Arrays.sort(s2chars);
        // 注意用Arrays.toString 会带上[,]，不用的话就是连起来的。
        return Arrays.toString(s1chars).equals(Arrays.toString(s2chars));
    }




    public static void main(String[] args) {
        String s1 = "abc";
        String s2 = "bac";
        System.out.println(new S0102是否为字符重排().CheckPermutation(s1, s2));
        char[] chars = new char[]{'1', '3', '3'};
        System.out.println(chars);
        System.out.println(Arrays.toString(chars));
        // error System.out.println(String.join("", chars));
        String[] strings = new String[]{"1234", "1324", "325"};
        System.out.println(Arrays.toString(strings));
        System.out.println(String.join("", strings));

    }
}
